home *** CD-ROM | disk | FTP | other *** search
/ Aminet 51 / Aminet 51 (2002)(GTI - Schatztruhe)[!][Oct 2002].iso / Aminet / dev / amos / SamplesMaster.lha / SamplesMaster / SamplesMaster.text < prev    next >
Encoding:
Text File  |  2002-08-13  |  51.0 KB  |  1,580 lines

  1. '-> SamplesMaster by Stefano Maria Regattin  
  2. 'i> 7 luglio 1996
  3. 'm> 8,9,11,13,15,16,21,22,23,25,27,28,30 luglio 1996 
  4. 'm> 1,2,4,7,8,10,12,13,14,16,17,20,21,28,29 agosto 1996
  5. 'm> 4,12,13,17 ottobre 1996
  6. 'm> 1,11,13,14 novembre 1996 
  7. 'm> 20 febbraio 1997 
  8. 'm> 8 marzo 1997 
  9. 'm> 17 giugno 1997 
  10. 'm> 10 novembre 1997 
  11. 'm> 31 marzo 1998
  12. 'm> 3,4,5,8,9,11,20,25,26,27,29 aprile 1998
  13. 'm> 5,7,8,9,19,23 luglio 1998
  14. 'm> 11 agosto 1998 
  15. 'm> 24 aprile 1999 
  16. 'm> 22,31 luglio 1999
  17. 'm> 28 novembre 1999 
  18. 'm> 4 dicembre 1999
  19. 'm> 20,21 maggio 2000
  20. 'm> 13 dicembre 2000 
  21. 'm> 17,20,21 gennaio 2001
  22. 'm> 26,27 febbraio 2001
  23. 'm> 12 agosto 2002 
  24. '------------------  
  25. Set Buffer 40
  26. BANCO=65535
  27. BANCODIIO=65534
  28. BANCO3=65533
  29. BANCO4=65532
  30. Global ANNOTAZIONI$,FILE$,NOMEFILE$,ZONAATTIVA$
  31. Global ALTEZZA,ANOMALOIFF,BANCO,BANCODIIO,BANCO3,BANCO4,CICLO,FILTRO
  32. Global FINECAMPIONE,FREQUENZA,GENERACAMPIONE,INIZIO,INIZIOCAMPIONE
  33. Global LUNGHEZZACAMPIONE,NUOVAFINECAMPIONE,NUOVAFREQUENZA,NUOVOINIZIOCAMPIONE
  34. Global PASSO,POSIZIONEINGRANDIMENTO,POSIZIONESLIDER,RIDUZIONE,SENZAMEMORIA
  35. Global ULTIMALINEA,XLINEAFINECAMPIONE,XLINEAINIZIOCAMPIONE
  36. Global YSLIDERINGRANDIMENTO,ZERO
  37. Global DIVISIONESLIDERINGRANDIMENTO#
  38. Dim F0RMADONDA(8191)
  39. Global F0RMADONDA()
  40. Proc SETTASCHERMO
  41. Proc ARCOBALENO
  42. Reserve As Chip Work BANCO,512
  43. FILTRO=True
  44. FREQUENZA=8363
  45. Proc CONDIZIONEINIZIALE
  46. Repeat 
  47.  Repeat 
  48.   TASTODELTOPOPREMUTO=Mouse Key
  49.   ZONATOPO=Mouse Zone
  50.   If TASTODELTOPOPREMUTO=1
  51.    If DENTROZONA=False
  52.     If ZONATOPO=1
  53.      'Suona il campione 
  54.      Inverse On : Print At(0,ULTIMALINEA-3);"Suona"
  55.      Proc SUONA
  56.     End If 
  57.     If ZONATOPO=2
  58.      'Ferma la riproduzione del campione  
  59.      Inverse On : Print At(0,ULTIMALINEA-2);"Ferma"
  60.      Sam Stop 
  61.     End If 
  62.     If ZONATOPO=3
  63.      'Attiva o disattiva la riproduzione all'infinito del campione  
  64.      CICLO= Not CICLO : Proc CICLO
  65.     End If 
  66.     If ZONATOPO=4
  67.      'Attiva o disattiva il filtro audio  
  68.      FILTRO= Not FILTRO : Proc FILTRO
  69.     End If 
  70.     If ZONATOPO=5
  71.      'Mostra tutto il campione  
  72.      Inverse On : Print At(19,ULTIMALINEA-2);"Tutto"
  73.      NUOVOINIZIOCAMPIONE=Start(BANCO)
  74.      NUOVAFINECAMPIONE=Start(BANCO)+Length(BANCO)-1
  75.      LUNGHEZZACAMPIONE=NUOVAFINECAMPIONE-NUOVOINIZIOCAMPIONE+1
  76.      LUNGHEZZACAMPIONE=Max(LUNGHEZZACAMPIONE,512)
  77.      Proc MOSTRACAMPIONE
  78.      INIZIO=True : Proc INIZIO
  79.      POSIZIONESLIDER=0
  80.      Proc SLIDERINGRANDIMENTO
  81.      POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  82.     End If 
  83.     If ZONATOPO=6
  84.      'Mostra una porzione del campione compresa tra tra le due linee verdi  
  85.      Inverse On : Print At(26,ULTIMALINEA-2);"Tra le linee"
  86.      Proc MOSTRACAMPIONE
  87.      INIZIO=True : Proc INIZIO
  88.      POSIZIONESLIDER=0
  89.      Proc SLIDERINGRANDIMENTO
  90.      POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  91.     End If 
  92.     If ZONATOPO=7
  93.      'Mostra l'inizio del campione ed attiva la linea verde marcatrice d'inizio 
  94.      ' come marcatore corrente  
  95.      INIZIO=True : Proc INIZIO
  96.      POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
  97.      POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  98.      Proc SLIDERINGRANDIMENTO : Proc INGRANDISCI
  99.     End If 
  100.     If ZONATOPO=8
  101.      'Mostra la fine del campione ed attiva la linea verde marcatrice della fine
  102.      ' come marcatore corrente
  103.      INIZIO=False : Proc INIZIO
  104.      POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319
  105.      POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  106.      Proc SLIDERINGRANDIMENTO : Proc INGRANDISCI
  107.     End If 
  108.     If ZONATOPO=9
  109.      'Cerca lo zero all'indietro nel campione a partire dalla linea verde 
  110.      ' marcatrice corrente  
  111.      Inverse On : Print At(51,ULTIMALINEA-2);"<Indietro"
  112.      If INIZIO=True
  113.       Proc CERCALOZERO[NUOVOINIZIOCAMPIONE,False] : NUOVOINIZIOCAMPIONE=Param
  114.       LIMITI[NUOVOINIZIOCAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
  115.       NUOVOINIZIOCAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
  116.      Else 
  117.       Proc CERCALOZERO[NUOVAFINECAMPIONE,False] : NUOVAFINECAMPIONE=Param
  118.       LIMITI[NUOVAFINECAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
  119.       NUOVAFINECAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319
  120.      End If 
  121.      POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  122.      Proc SLIDERINGRANDIMENTO
  123.      Proc AGGIUSTACAMPIONE : Proc LINEE : Proc INGRANDISCI
  124.     End If 
  125.     If ZONATOPO=10
  126.      'Cerca lo zero avanti nel campione a partire dalla linea verde marcatrice
  127.      ' corrente 
  128.      Inverse On : Print At(61,ULTIMALINEA-2);"Avanti>"
  129.      If INIZIO=True
  130.       Proc CERCALOZERO[NUOVOINIZIOCAMPIONE,True] : NUOVOINIZIOCAMPIONE=Param
  131.       LIMITI[NUOVOINIZIOCAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
  132.       NUOVOINIZIOCAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
  133.      Else 
  134.       Proc CERCALOZERO[NUOVAFINECAMPIONE,True] : NUOVAFINECAMPIONE=Param
  135.       LIMITI[NUOVAFINECAMPIONE,Start(BANCO),Start(BANCO)+Length(BANCO)-1]
  136.       NUOVAFINECAMPIONE=Param : POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319
  137.      End If 
  138.      POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  139.      Proc SLIDERINGRANDIMENTO
  140.      Proc AGGIUSTACAMPIONE : Proc LINEE : Proc INGRANDISCI
  141.     End If 
  142.     If ZONATOPO=11
  143.      'Carica un campione
  144.      Inverse On : Print At(69,ULTIMALINEA-3);"Carica" : Inverse Off 
  145.      Proc FERMACAMPIONEEDANNULLACICLOCAMPIONE
  146.      Proc CARICAUNFILE
  147.      Exit If SENZAMEMORIA=True,2
  148.      If Exist(FILE$)
  149.       Proc CARICARAWOIFF
  150.       Proc CONDIZIONEINIZIALE
  151.      End If 
  152.     End If 
  153.     If ZONATOPO=12
  154.      'Attiva la zona di ingrandimento o,se questa era già attiva, sposta la linea 
  155.      ' verde marcatrice corrente nella posizione indicata dal puntatore del mouse 
  156.      If ZONAATTIVA$="Ingrandimento"+Chr$(149)+Chr$(150)
  157.       Proc TIC[Chr$(151)+Chr$(152)+" "+Chr$(153)+Chr$(154)+" spostamento di un Byte",ULTIMALINEA]
  158.       If INIZIO=True
  159.        NUOVOINIZIOCAMPIONE=POSIZIONEINGRANDIMENTO+X Screen(X Mouse)
  160.        NUOVOINIZIOCAMPIONE=Max(NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE)
  161.       Else 
  162.        NUOVAFINECAMPIONE=POSIZIONEINGRANDIMENTO+X Screen(X Mouse)
  163.        NUOVAFINECAMPIONE=Min(NUOVAFINECAMPIONE,FINECAMPIONE)
  164.       End If 
  165.       POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  166.       Proc SLIDERINGRANDIMENTO
  167.       Proc AGGIUSTACAMPIONE : Proc LINEE : Proc INGRANDISCI
  168.      Else 
  169.       ZONAATTIVA$="Ingrandimento"+Chr$(149)+Chr$(150)
  170.       Proc MOSTRALAZONAATTIVA
  171.      End If 
  172.      NUOVOMESSAGGIO=True
  173.     End If 
  174.     If ZONATOPO=13
  175.      'Attiva la zona del campione o, se questa era già attiva, sposta la linea
  176.      ' verde marcatrice corrente nella posizione indicata dal puntatore del mouse 
  177.      If ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  178.       If INIZIO=True
  179.        NUOVOINIZIOCAMPIONE=INIZIOCAMPIONE+X Screen(X Mouse)*PASSO
  180.        NUOVOINIZIOCAMPIONE=Max(NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE)
  181.        POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
  182.       Else 
  183.        NUOVAFINECAMPIONE=INIZIOCAMPIONE+X Screen(X Mouse)*PASSO
  184.        NUOVAFINECAMPIONE=Min(NUOVAFINECAMPIONE,FINECAMPIONE)
  185.        POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-320
  186.       End If 
  187.       POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  188.       Proc SLIDERINGRANDIMENTO
  189.       Proc AGGIUSTACAMPIONE : Proc LINEE : Proc INGRANDISCI
  190.      Else 
  191.       ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  192.       Proc MOSTRALAZONAATTIVA
  193.      End If 
  194.     End If 
  195.     If ZONATOPO=14
  196.      'Genera un nuovo campione
  197.      Inverse On : Print At(6,ULTIMALINEA-2);"Genera" : Inverse Off 
  198.      Proc GENERACAMPIONE
  199.      GENERACAMPIONE=False
  200.      Proc CONDIZIONEINIZIALE
  201.     End If 
  202.     If ZONATOPO=15
  203.      'Salva il campione come RAW od IFF 
  204.      Inverse On : Print At(69,ULTIMALINEA-2);"Salva"
  205.      Proc FERMACAMPIONEEDANNULLACICLOCAMPIONE
  206.      Proc SALVAUNFILE
  207.      Proc MESSAGGI
  208.     End If 
  209.     If ZONATOPO=16
  210.      'Esce dal programma
  211.      Exit 2
  212.     End If 
  213.     If ZONATOPO=18
  214.      'Reimposta la frequenza di riproduzione originale del campione 
  215.      Inverse On 
  216.      Print At(0,ULTIMALINEA-5);"Frequenza"
  217.      Proc TIC["Ripristina la frequenza originaria",ULTIMALINEA]
  218.      NUOVAFREQUENZA=FREQUENZA
  219.      Proc FREQUENZA
  220.      NUOVOMESSAGGIO=True
  221.     End If 
  222.     If ZONATOPO=19
  223.      'Porta la frequenza di riproduzione del campione avanti  
  224.      Inverse On 
  225.      Print At(9,ULTIMALINEA-5);Chr$(147)+Chr$(148)
  226.      Proc TIC["Tasto sinistro del mouse>incremento lento",ULTIMALINEA]
  227.      Inc NUOVAFREQUENZA
  228.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  229.      Proc FREQUENZA
  230.      NUOVOMESSAGGIO=True
  231.     End If 
  232.     If ZONATOPO=20
  233.      'Porta la frequenza di riproduzione del campione indietro
  234.      Inverse On 
  235.      Print At(11,ULTIMALINEA-5);Chr$(149)+Chr$(150)
  236.      Proc TIC["Tasto sinistro del mouse>decremento lento",ULTIMALINEA]
  237.      Dec NUOVAFREQUENZA
  238.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  239.      Proc FREQUENZA
  240.      NUOVOMESSAGGIO=True
  241.     End If 
  242.     If ZONATOPO=21
  243.      'Miscela due campioni con dissolvenza tra l'uno e l'altro
  244.      Inverse On : Print At(26,ULTIMALINEA-5);"MixTimbri" : Inverse Off 
  245.      Proc MISCELATIMBRI
  246.      GENERACAMPIONE=False
  247.      Proc CONDIZIONEINIZIALE
  248.     End If 
  249.     If ZONATOPO=22
  250.      'Posiziona al volo le linee marcatrici verdi 
  251.      Inverse On : Print At(36,ULTIMALINEA-5);"MarcaAlVolo" : Inverse Off 
  252.      Proc FERMACAMPIONEEDANNULLACICLOCAMPIONE
  253.      Proc MARCAALVOLO
  254.      Proc AGGIUSTACAMPIONE
  255.      Proc SLIDERINGRANDIMENTO
  256.      POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  257.      NUOVOMESSAGGIO=True
  258.     End If 
  259.     DENTROZONA=True
  260.    End If 
  261.    If ZONATOPO=17
  262.     'Attiva lo slider che permette di scegliere l'area ingrandita del campione 
  263.     ' da vedere
  264.     POSIZIONESLIDER=X Screen(X Mouse)/DIVISIONESLIDERINGRANDIMENTO#
  265.     Proc SLIDERINGRANDIMENTO
  266.     POSIZIONEINGRANDIMENTO=INIZIOCAMPIONE+X Screen(X Mouse)*PASSO-319
  267.     Proc INGRANDISCI
  268.    End If 
  269.   Else If TASTODELTOPOPREMUTO=2
  270.    If ZONATOPO=19
  271.     'Porta la frequenza di riproduzione del campione avanti velocemente
  272.     Inverse On 
  273.     Print At(9,ULTIMALINEA-5);Chr$(147)+Chr$(148)
  274.     Proc TIC["Tasto destro del mouse>incremento veloce",ULTIMALINEA]
  275.     Inc NUOVAFREQUENZA
  276.     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  277.     Proc FREQUENZA
  278.     NUOVOMESSAGGIO=True
  279.    End If 
  280.    If ZONATOPO=20
  281.     'Porta la frequenza di riproduzione del campioneindietro velocemente 
  282.     Inverse On 
  283.     Print At(11,ULTIMALINEA-5);Chr$(149)+Chr$(150)
  284.     Proc TIC["Tasto destro del mouse>decremento veloce",ULTIMALINEA]
  285.     Dec NUOVAFREQUENZA
  286.     Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  287.     Proc FREQUENZA
  288.     NUOVOMESSAGGIO=True
  289.    End If 
  290.   Else 
  291.    Inverse Off 
  292.    Print At(0,ULTIMALINEA-3);"Suona"
  293.    Print At(0,ULTIMALINEA-2);"Ferma"
  294.    Print At(19,ULTIMALINEA-2);"Tutto"
  295.    Print At(26,ULTIMALINEA-2);"Tra le linee"
  296.    Print At(51,ULTIMALINEA-2);"<Indietro"
  297.    Print At(61,ULTIMALINEA-2);"Avanti>"
  298.    Print At(69,ULTIMALINEA-3);"Carica"
  299.    Print At(69,ULTIMALINEA-2);"Salva"
  300.    Print At(0,ULTIMALINEA-5);"Frequenza";Chr$(147)+Chr$(148)+Chr$(149)+Chr$(150)
  301.    Print At(26,ULTIMALINEA-5);"MixTimbri"
  302.    Print At(36,ULTIMALINEA-5);"MarcaAlVolo"
  303.    If NUOVOMESSAGGIO=True
  304.     Proc MESSAGGI
  305.     NUOVOMESSAGGIO=False
  306.    End If 
  307.    DENTROZONA=False
  308.   End If 
  309.   TASTOPREMUTO$=Inkey$
  310.  Until TASTOPREMUTO$<>""
  311.  If ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  312.   If INIZIO=True
  313.    If TASTOPREMUTO$=Cright$
  314.     Add NUOVOINIZIOCAMPIONE,PASSO
  315.     LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  316.     NUOVOINIZIOCAMPIONE=Param : Proc AGGIUSTACAMPIONE : Proc LINEE
  317.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  318.     Proc SLIDERINGRANDIMENTO
  319.     POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  320.    End If 
  321.    If TASTOPREMUTO$=Cleft$
  322.     Add NUOVOINIZIOCAMPIONE,-PASSO
  323.     LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  324.     NUOVOINIZIOCAMPIONE=Param : Proc AGGIUSTACAMPIONE : Proc LINEE
  325.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  326.     Proc SLIDERINGRANDIMENTO
  327.     POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  328.    End If 
  329.   Else 
  330.    If TASTOPREMUTO$=Cright$
  331.     Add NUOVAFINECAMPIONE,PASSO
  332.     LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  333.     NUOVAFINECAMPIONE=Param : Proc AGGIUSTACAMPIONE : Proc LINEE
  334.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  335.     Proc SLIDERINGRANDIMENTO
  336.     POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
  337.    End If 
  338.    If TASTOPREMUTO$=Cleft$
  339.     Add NUOVAFINECAMPIONE,-PASSO
  340.     LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  341.     NUOVAFINECAMPIONE=Param : Proc AGGIUSTACAMPIONE : Proc LINEE
  342.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  343.     Proc SLIDERINGRANDIMENTO
  344.     POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
  345.    End If 
  346.   End If 
  347.  Else 
  348.   If INIZIO=True
  349.    If TASTOPREMUTO$=Cright$
  350.     If TASTODELTOPOPREMUTO=0
  351.      Add NUOVOINIZIOCAMPIONE,320
  352.     Else 
  353.      Inc NUOVOINIZIOCAMPIONE
  354.     End If 
  355.     LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  356.     NUOVOINIZIOCAMPIONE=Param : Proc AGGIUSTACAMPIONE : Proc LINEE
  357.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  358.     Proc SLIDERINGRANDIMENTO
  359.     POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  360.    End If 
  361.    If TASTOPREMUTO$=Cleft$
  362.     If TASTODELTOPOPREMUTO=0
  363.      Add NUOVOINIZIOCAMPIONE,-320
  364.     Else 
  365.      Dec NUOVOINIZIOCAMPIONE
  366.     End If 
  367.     LIMITI[NUOVOINIZIOCAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  368.     NUOVOINIZIOCAMPIONE=Param : Proc AGGIUSTACAMPIONE : Proc LINEE
  369.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  370.     Proc SLIDERINGRANDIMENTO
  371.     POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320 : Proc INGRANDISCI
  372.    End If 
  373.   Else 
  374.    If TASTOPREMUTO$=Cright$
  375.     If TASTODELTOPOPREMUTO=0
  376.      Add NUOVAFINECAMPIONE,320
  377.     Else 
  378.      Inc NUOVAFINECAMPIONE
  379.     End If 
  380.     LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  381.     NUOVAFINECAMPIONE=Param : Proc AGGIUSTACAMPIONE : Proc LINEE
  382.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  383.     Proc SLIDERINGRANDIMENTO
  384.     POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
  385.    End If 
  386.    If TASTOPREMUTO$=Cleft$
  387.     If TASTODELTOPOPREMUTO=0
  388.      Add NUOVAFINECAMPIONE,-320
  389.     Else 
  390.      Dec NUOVAFINECAMPIONE
  391.     End If 
  392.     LIMITI[NUOVAFINECAMPIONE,INIZIOCAMPIONE,FINECAMPIONE]
  393.     NUOVAFINECAMPIONE=Param : Proc AGGIUSTACAMPIONE : Proc LINEE
  394.     POSIZIONESLIDER=(PASSO*(POSIZIONEINGRANDIMENTO-INIZIOCAMPIONE+1))/(FINECAMPIONE-INIZIOCAMPIONE+1)
  395.     Proc SLIDERINGRANDIMENTO
  396.     POSIZIONEINGRANDIMENTO=NUOVAFINECAMPIONE-319 : Proc INGRANDISCI
  397.    End If 
  398.   End If 
  399.  End If 
  400.  If TASTOPREMUTO$=Cup$
  401.   ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  402.   Proc MOSTRALAZONAATTIVA
  403.  End If 
  404.  If TASTOPREMUTO$=Cdown$
  405.   ZONAATTIVA$="Ingrandimento"+Chr$(149)+Chr$(150)
  406.   Proc MOSTRALAZONAATTIVA
  407.  End If 
  408.  If TASTOPREMUTO$=" "
  409.   Inverse On : Print At(0,ULTIMALINEA-3);"Suona"
  410.   Proc SUONA
  411.  End If 
  412.  If TASTOPREMUTO$="c"
  413.  End If 
  414.  If TASTOPREMUTO$="s"
  415.  End If 
  416. Until TASTOPREMUTO$=Chr$(27)
  417. Inverse On : Print At(76,ULTIMALINEA-2);"Esci" : Wait 50
  418. Erase BANCO : Reserve Zone : Rainbow Del 0 : Screen Close 0 : End 
  419. Procedure AGGIUSTACAMPIONE
  420.  NUOVOINIZIOCAMPIONE=Min(NUOVOINIZIOCAMPIONE,NUOVAFINECAMPIONE-511)
  421.  NUOVAFINECAMPIONE=Max(NUOVAFINECAMPIONE,NUOVOINIZIOCAMPIONE+511)
  422.  Inverse Off 
  423.  Print At(0,8);"Inizio>Byte";NUOVOINIZIOCAMPIONE-Start(BANCO);
  424.  Print " Fine>Byte";NUOVAFINECAMPIONE-Start(BANCO);
  425.  LUNGHEZZACAMPIONE=NUOVAFINECAMPIONE-NUOVOINIZIOCAMPIONE+1
  426.  LUNGHEZZACAMPIONE=Max(LUNGHEZZACAMPIONE,512)
  427.  Print " Lunghezza>";Str$(LUNGHEZZACAMPIONE)-" ";" Byte     "
  428. End Proc
  429. Procedure ARCOBALENO
  430.  Data $FFF,$EEE,$DDD,$CCC,$BBB,$AAA,$999,$888
  431.  Data $FFF,$EEE,$DDD,$CCC,$BBB,$AAA,$999,$888
  432.  Set Rainbow 0,1,16,"","",""
  433.  For LINEA=0 To 15 : Read DATO : Rain(0,LINEA)=DATO : Next LINEA
  434.  If Ntsc Then LUNGHEZZAARCOBALENO=223 Else LUNGHEZZAARCOBALENO=271
  435.  Rainbow 0,2,0,LUNGHEZZAARCOBALENO
  436. End Proc
  437. Procedure AZZERAFORMADONDA
  438.  Shared LUNGHEZZASINTETICO
  439.  For A=0 To LUNGHEZZASINTETICO-1
  440.   F0RMADONDA(A)=0
  441.  Next A
  442. End Proc
  443. Procedure CARICARAWOIFF
  444.  INDIRIZZO=Start(BANCODIIO)+8
  445.  If Peek$(INDIRIZZO,4)="8SVX"
  446.   Add INDIRIZZO,12
  447.   LUNGHEZZABANCO=Leek(INDIRIZZO)
  448.   If LUNGHEZZABANCO=0
  449.    Add INDIRIZZO,4
  450.    LUNGHEZZABANCO=Leek(INDIRIZZO)
  451.   Else 
  452.    Add INDIRIZZO,4
  453.   End If 
  454.   Add INDIRIZZO,8
  455.   FREQUENZA=Deek(INDIRIZZO)
  456.   Add INDIRIZZO,8
  457.   If Peek$(INDIRIZZO,4)="NAME"
  458.    Add INDIRIZZO,4
  459.    DATO=Leek(INDIRIZZO)
  460.    Add INDIRIZZO,4+DATO
  461.   End If 
  462.   If Peek$(INDIRIZZO,4)="ANNO"
  463.    Add INDIRIZZO,4
  464.    DATO=Leek(INDIRIZZO)
  465.    Add INDIRIZZO,4
  466.    ANNOTAZIONI$=Peek$(INDIRIZZO,DATO)-Chr$(0)
  467.    Add INDIRIZZO,DATO
  468.   End If 
  469.   If Peek$(INDIRIZZO,4)="BODY"
  470.    Add INDIRIZZO,4
  471.    LUNGHEZZADATI=Leek(INDIRIZZO)
  472.    Add INDIRIZZO,4
  473.    LUNGHEZZABANCO=Max(LUNGHEZZABANCO,LUNGHEZZADATI)
  474.    Reserve As Chip Work BANCO,LUNGHEZZABANCO
  475.    Copy INDIRIZZO,INDIRIZZO+LUNGHEZZABANCO-1 To Start(BANCO)
  476.   Else 
  477.    Proc TIC[FILE$+Str$(Length(BANCODIIO))+" Byte",ULTIMALINEA-1]
  478.    Proc TIC["è un IFF anomalo, non posso caricarlo!",ULTIMALINEA]
  479.    Wait 200
  480.    NOMEFILE$=""
  481.   End If 
  482.  Else 
  483.   LUNGHEZZABANCO=Length(BANCODIIO)
  484.   Reserve As Chip Work BANCO,LUNGHEZZABANCO
  485.   Copy Start(BANCODIIO),Start(BANCODIIO)+LUNGHEZZABANCO-1 To Start(BANCO)
  486.   FREQUENZA=8363
  487.   ANNOTAZIONI$=""
  488.  End If 
  489.  Erase BANCODIIO
  490. End Proc
  491. Procedure CARICAUNFILE
  492.  FILE$=Fsel$("**","","Carica un campione audio","Premi Esc per uscire")
  493.  If Exist(FILE$)
  494.   Open In 1,FILE$
  495.   LUNGHEZZABANCO=Max(Lof(1),512)
  496.   Close 1
  497.   MEMORIA=Chip Free+Fast Free
  498.   If LUNGHEZZABANCO>MEMORIA
  499.    Proc TIC["Non c'è memoria sufficiente per caricare il file",ULTIMALINEA-1]
  500.    Proc TIC[FILE$,ULTIMALINEA] : Wait 200
  501.    SENZAMEMORIA=True
  502.   Else 
  503.    Reserve As Work BANCODIIO,LUNGHEZZABANCO
  504.    Bload FILE$,Start(BANCODIIO)
  505.    SEPARATORE=Instr(FILE$,":") : POSIZIONE=1
  506.    For A=1 To Len(FILE$)
  507.     If Instr(FILE$,"/",POSIZIONE)>0
  508.      SEPARATORECASSETTO=Instr(FILE$,"/",POSIZIONE)
  509.      POSIZIONE=SEPARATORECASSETTO+1
  510.     End If 
  511.    Next A
  512.    SEPARATORE=Max(SEPARATORE,SEPARATORECASSETTO)
  513.    PERCORSO$=Left$(FILE$,SEPARATORE)
  514.    If Right$(PERCORSO$,1)="/"
  515.     PERCORSO$=Left$(PERCORSO$,Len(PERCORSO$)-1)
  516.    End If 
  517.    NOMEFILE$=Right$(FILE$,Len(FILE$)-SEPARATORE)
  518.    SENZAMEMORIA=False
  519.   End If 
  520.  End If 
  521. End Proc
  522. Procedure CERCALOZERO[POSIZIONE,AVANTI]
  523.  If AVANTI=True
  524.   Repeat 
  525.    Inc POSIZIONE
  526.    DATO=Peek(POSIZIONE)
  527.   Until DATO=0
  528.  Else 
  529.   Repeat 
  530.    Dec POSIZIONE
  531.    DATO=Peek(POSIZIONE)
  532.   Until DATO=0
  533.  End If 
  534. End Proc[POSIZIONE]
  535. Procedure CICLO
  536.  If CICLO=True
  537.   Sam Loop On : Inverse On 
  538.   If GENERACAMPIONE=True
  539.    Print At(12,8);"Ciclo" : Inverse Off 
  540.   Else 
  541.    Print At(6,ULTIMALINEA-3);"Ciclo" : Inverse Off 
  542.   End If 
  543.  Else 
  544.   Sam Loop Off : Inverse Off 
  545.   If GENERACAMPIONE=True
  546.    Print At(12,8);"Ciclo"
  547.   Else 
  548.    Print At(6,ULTIMALINEA-3);"Ciclo"
  549.   End If 
  550.  End If 
  551. End Proc
  552. Procedure CONDIZIONEINIZIALE
  553.  INIZIO=True
  554.  NUOVOINIZIOCAMPIONE=Start(BANCO)
  555.  NUOVAFINECAMPIONE=Start(BANCO)+Length(BANCO)-1
  556.  LUNGHEZZACAMPIONE=NUOVAFINECAMPIONE-NUOVOINIZIOCAMPIONE+1
  557.  LUNGHEZZACAMPIONE=Max(LUNGHEZZACAMPIONE,512)
  558.  NUOVAFREQUENZA=FREQUENZA
  559.  Cls 
  560.  Proc MOSTRACAMPIONE
  561.  POSIZIONEINGRANDIMENTO=NUOVOINIZIOCAMPIONE-320
  562.  Proc INGRANDISCI
  563.  Proc SETTALEZONE
  564.  Proc CICLO
  565.  Proc MESSAGGI
  566.  Proc FILTRO
  567.  Proc FREQUENZA
  568.  ZONAATTIVA$="     Campione"+Chr$(147)+Chr$(148)
  569.  Proc MOSTRALAZONAATTIVA
  570.  Print At(0,ULTIMALINEA-4);"Sorgente>";ANNOTAZIONI$
  571. End Proc
  572. Procedure FERMACAMPIONEEDANNULLACICLOCAMPIONE
  573.  Sam Stop : CICLO=False : Proc CICLO
  574. End Proc
  575. Procedure FILTRO
  576.  If FILTRO=True
  577.   Led On 
  578.   If GENERACAMPIONE=True
  579.    Inverse On : Print At(18,8);"Filtro" : Inverse Off 
  580.   Else 
  581.    Inverse On : Print At(12,ULTIMALINEA-3);"Filtro" : Inverse Off 
  582.   End If 
  583.  Else 
  584.   Led Off 
  585.   If GENERACAMPIONE=True
  586.    Print At(18,8);"Filtro"
  587.   Else 
  588.    Print At(12,ULTIMALINEA-3);"Filtro"
  589.   End If 
  590.  End If 
  591. End Proc
  592. Procedure FREQUENZA
  593.  If GENERACAMPIONE=True
  594.   Print At(39,8);Str$(NUOVAFREQUENZA)-" ";
  595.  Else 
  596.   Print At(14,ULTIMALINEA-5);Str$(NUOVAFREQUENZA)-" ";
  597.  End If 
  598.  Print " Hertz "
  599. End Proc
  600. Procedure GENERACAMPIONE
  601.  Shared ANNOTAZIONI$
  602.  Shared FREQUENZAMASSIMA,LUNGHEZZASINTETICO,MULTIPLO#
  603.  NOMEFILE$="Sintetico"
  604.  GENERACAMPIONE=True
  605.  Cls 
  606.  Proc TIC["Indica la lunghezza in multipli di 512 Byte (01-16)",ULTIMALINEA]
  607.  RISPOSTA$=Input$(2) : RISPOSTA=Val(RISPOSTA$)
  608.  Proc LIMITI[RISPOSTA,1,16] : RISPOSTA=Param
  609.  LUNGHEZZASINTETICO=512*RISPOSTA
  610.  Reserve Zone 21
  611.  Ink 2 : Draw 0,31 To 511,31 : Draw 0,103 To 511,103 : Ink 1
  612.  Set Zone 1,0,0 To 511,63
  613.  Print At(0,8);Zone$("Suona",2)
  614.  Print At(6,8);Zone$("Ferma",3)
  615.  Print At(12,8);Zone$("Ciclo",4)
  616.  Print At(18,8);Zone$("Filtro",5)
  617.  Set Zone 6,0,72 To 511,135
  618.  Print At(0,18);Zone$("Suona",7)
  619.  Print At(6,18);"Forme d'onda:"
  620.  Print At(6,19);Zone$("Sinusoidale",8)
  621.  Print At(6,20);Zone$("Triangolare",9)
  622.  Print At(6,21);Zone$("Dente di sega",10)
  623.  Print At(6,22);Zone$("Quadra",11)
  624.  Print At(6,23);Zone$("Disegno",12)
  625.  Print At(20,18);"Operazioni:"
  626.  Print At(20,19);Zone$("Somma",13)
  627.  Print At(20,20);Zone$("Sottrai",14)
  628.  Print At(20,21);Zone$("Inverti",15)
  629.  Print At(20,22);Zone$("Rovescia",16)
  630.  Print At(76,17); Using "####";1
  631.  Hslider 0,136 To 607,143,128,0,1
  632.  Set Zone 17,0,136 To 607,143
  633.  Print At(25,8);Zone$("Frequenza",18);
  634.  Print Zone$(Chr$(147)+Chr$(148),19);
  635.  Print Zone$(Chr$(149)+Chr$(150),20);
  636.  Print ">";Str$(NUOVAFREQUENZA)-" ";" Hertz"
  637.  Print At(20,23);Zone$("Progressione",21)
  638.  Proc CICLO
  639.  Proc FILTRO
  640.  Reserve As Chip Work BANCO,LUNGHEZZASINTETICO
  641.  Reserve As Chip Work BANCO4,LUNGHEZZASINTETICO
  642.  FREQUENZAMASSIMA=LUNGHEZZASINTETICO/4
  643.  LUNGHEZZA$=Str$(LUNGHEZZASINTETICO)+" Byte"
  644.  Print At(80-Len(LUNGHEZZA$),8);LUNGHEZZA$
  645.  Proc TIC["Premi Esc per uscire",ULTIMALINEA]
  646.  Repeat 
  647.   Repeat 
  648.    TASTOPREMUTO$=Inkey$
  649.    TASTODELTOPOPREMUTO=Mouse Key
  650.    ZONATOPO=Mouse Zone
  651.    If TASTODELTOPOPREMUTO=1
  652.     If DENTROZONA=False
  653.      If ZONATOPO=2
  654.       Inverse On : Print At(0,8);"Suona"
  655.       Sam Raw 1,Start(BANCO),Length(BANCO),NUOVAFREQUENZA
  656.       Sam Raw 2,Start(BANCO),Length(BANCO),NUOVAFREQUENZA
  657.      End If 
  658.      If ZONATOPO=3
  659.       Inverse On : Print At(6,8);"Ferma"
  660.       Sam Stop 
  661.      End If 
  662.      If ZONATOPO=4
  663.       CICLO= Not CICLO : Proc CICLO
  664.      End If 
  665.      If ZONATOPO=5
  666.       FILTRO= Not FILTRO : Proc FILTRO
  667.      End If 
  668.      If ZONATOPO=7
  669.       Inverse On : Print At(0,18);"Suona"
  670.       Sam Raw 4,Start(BANCO4),Length(BANCO4),NUOVAFREQUENZA
  671.       Sam Raw 8,Start(BANCO4),Length(BANCO4),NUOVAFREQUENZA
  672.      End If 
  673.      If ZONATOPO=8
  674.       Inverse On : Print At(6,19);"Sinusoidale"
  675.       Cls 0,0,72 To 639+1,135+1
  676.       Ink 2 : Draw 0,103 To 511,103 : Ink 1
  677.       UNITA#=2*Pi#/LUNGHEZZASINTETICO
  678.       For X=0 To LUNGHEZZASINTETICO-1
  679.        DATO=Sin(UNITA#*X)*127
  680.        Plot(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  681.        If DATO<0
  682.         Add DATO,256
  683.        End If 
  684.        INDIRIZZO=Start(BANCO4)+X
  685.        Poke INDIRIZZO,DATO
  686.       Next X
  687.       If MULTIPLO#>1
  688.        Proc MULTIPLO
  689.       End If 
  690.      End If 
  691.      If ZONATOPO=9
  692.       Inverse On : Print At(6,20);"Triangolare"
  693.       Cls 0,0,72 To 639+1,135+1
  694.       Ink 2 : Draw 0,103 To 511,103 : Ink 1
  695.       For X=0 To LUNGHEZZASINTETICO-1
  696.        If X<LUNGHEZZASINTETICO/4
  697.         DATO=(X*512)/LUNGHEZZASINTETICO
  698.        End If 
  699.        If X>LUNGHEZZASINTETICO/4-1 and X<LUNGHEZZASINTETICO/4*3
  700.         DATO=((LUNGHEZZASINTETICO/2-X)*512)/LUNGHEZZASINTETICO-1
  701.        End If 
  702.        If X>LUNGHEZZASINTETICO/4*3-1
  703.         DATO=((X-LUNGHEZZASINTETICO)*512)/LUNGHEZZASINTETICO
  704.        End If 
  705.        Plot(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  706.        If DATO<0
  707.         Add DATO,256
  708.        End If 
  709.        INDIRIZZO=Start(BANCO4)+X
  710.        Poke INDIRIZZO,DATO
  711.       Next X
  712.       If MULTIPLO#>1
  713.        Proc MULTIPLO
  714.       End If 
  715.      End If 
  716.      If ZONATOPO=10
  717.       Inverse On : Print At(6,21);"Dente di sega"
  718.       Cls 0,0,72 To 639+1,135+1
  719.       Ink 2 : Draw 0,103 To 511,103 : Ink 1
  720.       For X=0 To LUNGHEZZASINTETICO-1
  721.        DATO=((X/2-LUNGHEZZASINTETICO/4)*512)/LUNGHEZZASINTETICO
  722.        Plot(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  723.        If DATO<0
  724.         Add DATO,256
  725.        End If 
  726.        INDIRIZZO=Start(BANCO4)+X
  727.        Poke INDIRIZZO,DATO
  728.       Next X
  729.       If MULTIPLO#>1
  730.        Proc MULTIPLO
  731.       End If 
  732.      End If 
  733.      If ZONATOPO=11
  734.       Inverse On : Print At(6,22);"Quadra"
  735.       Cls 0,0,72 To 639+1,135+1
  736.       Ink 2 : Draw 0,103 To 511,103 : Ink 1 : Gr Locate 0,103
  737.       For X=0 To LUNGHEZZASINTETICO-1
  738.        If X<LUNGHEZZASINTETICO/2
  739.         DATO=127
  740.        Else 
  741.         DATO=-128
  742.        End If 
  743.        Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  744.        If DATO<0
  745.         Add DATO,256
  746.        End If 
  747.        INDIRIZZO=Start(BANCO4)+X
  748.        Poke INDIRIZZO,DATO
  749.       Next X
  750.       If MULTIPLO#>1
  751.        Proc MULTIPLO
  752.       End If 
  753.      End If 
  754.      If ZONATOPO=12
  755.       Inverse On : Print At(6,23);"Disegno"
  756.       Proc TIC["Premi il tasto destro del mouse per finire",ULTIMALINEA]
  757.       Repeat 
  758.        TASTODELTOPOPREMUTO=Mouse Key
  759.        ZONATOPO=Mouse Zone
  760.        If TASTODELTOPOPREMUTO=1 and ZONATOPO=6
  761.         XTOPO=X Screen(X Mouse) : YTOPO=Y Screen(Y Mouse)
  762.         Ink 0 : Box XTOPO,72 To XTOPO+1,135
  763.         Ink 2 : Draw XTOPO,103 To XTOPO+1,103
  764.         Ink 1 : Draw XTOPO,YTOPO To XTOPO+1,YTOPO
  765.         DATO=(103-YTOPO)*4
  766.         If DATO<0
  767.          Add DATO,256
  768.         End If 
  769.         INDIRIZZO=Start(BANCO4)+XTOPO*LUNGHEZZASINTETICO/512
  770.         For A=0 To LUNGHEZZASINTETICO/512
  771.          Poke INDIRIZZO+A,DATO
  772.         Next A
  773.        End If 
  774.       Until TASTODELTOPOPREMUTO=2
  775.       Cls 0,0,72 To 639+1,135+1
  776.       Ink 2 : Draw 0,103 To 511,103 : Ink 1
  777.       Gr Locate 0,103
  778.       For X=0 To LUNGHEZZASINTETICO-1 Step LUNGHEZZASINTETICO/512
  779.        DATO=Peek(Start(BANCO4)+X)
  780.        If DATO>127
  781.         Add DATO,-256
  782.        End If 
  783.        Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  784.       Next X
  785.       NUOVOMESSAGGIO=True
  786.      End If 
  787.      If ZONATOPO=13
  788.       Inverse On : Print At(20,19);"Somma"
  789.       Proc SOMMA
  790.       Proc MOSTRASINTETICO
  791.      End If 
  792.      If ZONATOPO=14
  793.       Inverse On : Print At(20,20);"Sottrai"
  794.       For X=0 To LUNGHEZZASINTETICO-1
  795.        DATO=Peek(Start(BANCO4)+X)
  796.        If DATO>127
  797.         Add DATO,-256
  798.        End If 
  799.        Add F0RMADONDA(X),-DATO
  800.       Next X
  801.       Proc MOSTRASINTETICO
  802.      End If 
  803.      If ZONATOPO=15
  804.       Inverse On : Print At(20,21);"Inverti"
  805.       Cls 0,0,72 To 639+1,135+1
  806.       Ink 2 : Draw 0,103 To 511,103 : Ink 1
  807.       Gr Locate 0,103
  808.       For X=0 To LUNGHEZZASINTETICO-1
  809.        DATO=Peek(Start(BANCO4)+X)
  810.        If DATO>127
  811.         Add DATO,-256
  812.        End If 
  813.        DATO= Not DATO
  814.        Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  815.        If DATO<0
  816.         Add DATO,256
  817.        End If 
  818.        INDIRIZZO=Start(BANCO4)+X
  819.        Poke INDIRIZZO,DATO
  820.       Next X
  821.      End If 
  822.      If ZONATOPO=16
  823.       Inverse On : Print At(20,22);"Rovescia"
  824.       Cls 0,0,72 To 639+1,135+1
  825.       Ink 2 : Draw 0,103 To 511,103 : Ink 1
  826.       Reserve As Work BANCO3,LUNGHEZZASINTETICO
  827.       For X=0 To LUNGHEZZASINTETICO-1
  828.        DATO=Peek(Start(BANCO4)+X)
  829.        INDIRIZZO=Start(BANCO3)+LUNGHEZZASINTETICO-1-X
  830.        Poke INDIRIZZO,DATO
  831.        If DATO>127
  832.         Add DATO,-256
  833.        End If 
  834.        Polyline To((LUNGHEZZASINTETICO-1-X)*512)/LUNGHEZZASINTETICO,103-DATO/4
  835.       Next X
  836.       Copy Start(BANCO3),Start(BANCO3)+Length(BANCO3)-1 To Start(BANCO4)
  837.       Erase BANCO3
  838.      End If 
  839.      If ZONATOPO=18
  840.       Inverse On : Print At(25,8);"Frequenza"
  841.       Proc TIC["Ripristina la frequenza originaria",ULTIMALINEA]
  842.       NUOVAFREQUENZA=FREQUENZA
  843.       Proc FREQUENZA
  844.       NUOVOMESSAGGIO=True
  845.      End If 
  846.      If ZONATOPO=19
  847.       Inverse On : Print At(34,8);Chr$(147)+Chr$(148)
  848.       Proc TIC["Tasto sinistro del mouse>incremento lento",ULTIMALINEA]
  849.       Inc NUOVAFREQUENZA
  850.       Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  851.       Proc FREQUENZA
  852.       NUOVOMESSAGGIO=True
  853.      End If 
  854.      If ZONATOPO=20
  855.       Inverse On : Print At(36,8);Chr$(149)+Chr$(150)
  856.       Proc TIC["Tasto sinistro del mouse>decremento lento",ULTIMALINEA]
  857.       Dec NUOVAFREQUENZA
  858.       Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  859.       Proc FREQUENZA
  860.       NUOVOMESSAGGIO=True
  861.      End If 
  862.      If ZONATOPO=21
  863.       Inverse On : Print At(20,23);"Progressione"
  864.       Proc TIC["Progressione aritmetica o geometrica (a/g)?",ULTIMALINEA]
  865.       RISPOSTA$=Input$(1) : RISPOSTA$=Lower$(RISPOSTA$)
  866.       If RISPOSTA$="a"
  867.        PROGRESSIONE$="Aritmetica"
  868.       End If 
  869.       If RISPOSTA$="g"
  870.        PROGRESSIONE$="Geometrica"
  871.       End If 
  872.       If PROGRESSIONE$="Aritmetica" or PROGRESSIONE$="Geometrica"
  873.        Locate 0,ULTIMALINEA : Ink 0 : Bar 0,248 To 639,255 : Ink 1
  874.        Input "Inizio della progressione (1-"+Str$(FREQUENZAMASSIMA)-" "+")?";RISPOSTA$;
  875.        Curs Off 
  876.        If RISPOSTA$<>""
  877.         PRIMOTERMINE=Val(RISPOSTA$)
  878.         Proc LIMITI[PRIMOTERMINE,1,FREQUENZAMASSIMA] : PRIMOTERMINE=Param
  879.         Locate 0,ULTIMALINEA : Ink 0 : Bar 0,248 To 639,255 : Ink 1
  880.         Input "Fine della progressione (1-"+Str$(FREQUENZAMASSIMA)-" "+")?";RISPOSTA$;
  881.         Curs Off 
  882.         If RISPOSTA$<>""
  883.          ULTIMOTERMINE=Val(RISPOSTA$)
  884.          Proc LIMITI[ULTIMOTERMINE,1,FREQUENZAMASSIMA] : ULTIMOTERMINE=Param
  885.          Locate 0,ULTIMALINEA : Ink 0 : Bar 0,248 To 639,255 : Ink 1
  886.          Input "Numero di valori intermedi (1-126)?";RISPOSTA$;
  887.          Curs Off 
  888.          If RISPOSTA$<>""
  889.           VLORIINTERMEDI=Val(RISPOSTA$) : VLORITOTALI=VLORIINTERMEDI+2
  890.           Proc LIMITI[VLORITOTALI,3,128] : VLORITOTALI=Param
  891.           If PROGRESSIONE$="Aritmetica"
  892.            RAGIONE#=(ULTIMOTERMINE-PRIMOTERMINE)/(VLORITOTALI-1*1.0)
  893.            For A=1 To VLORITOTALI
  894.             If A=VLORITOTALI
  895.              MULTIPLO#=ULTIMOTERMINE
  896.             Else 
  897.              MULTIPLO#=RAGIONE#*(A-1)+PRIMOTERMINE
  898.             End If 
  899.             Proc TIC["Valore"+Str$(A)+":"+Str$(MULTIPLO#),ULTIMALINEA]
  900.             Proc MULTIPLO
  901.             Cls 0,0,72 To 639+1,135+1
  902.             Ink 2 : Draw 0,103 To 511,103 : Ink 1
  903.             Proc SOMMA
  904.            Next A
  905.            For A=0 To LUNGHEZZASINTETICO-1 Step 4
  906.             Loke Start(BANCO4)+A,0
  907.            Next A
  908.            Proc MOSTRASINTETICO
  909.           End If 
  910.           If PROGRESSIONE$="Geometrica"
  911.            RAGIONE#=(ULTIMOTERMINE/PRIMOTERMINE)^(1.0/(VLORITOTALI-1))
  912.            For A=1 To VLORITOTALI
  913.             If A=VLORITOTALI
  914.              MULTIPLO#=ULTIMOTERMINE
  915.             Else 
  916.              MULTIPLO#=RAGIONE#^(A-1)*PRIMOTERMINE
  917.             End If 
  918.             Proc TIC["Valore"+Str$(A)+":"+Str$(MULTIPLO#),ULTIMALINEA]
  919.             Proc MULTIPLO
  920.             Cls 0,0,72 To 639+1,135+1
  921.             Ink 2 : Draw 0,103 To 511,103 : Ink 1
  922.             Proc SOMMA
  923.            Next A
  924.            For A=0 To LUNGHEZZASINTETICO-1 Step 4
  925.             Loke Start(BANCO4)+A,0
  926.            Next A
  927.            Proc MOSTRASINTETICO
  928.           End If 
  929.          End If 
  930.         End If 
  931.        End If 
  932.       End If 
  933.       PROGRESSIONE$=""
  934.       NUOVOMESSAGGIO=True
  935.      End If 
  936.      DENTROZONA=True
  937.     End If 
  938.     If ZONATOPO=17
  939.      MULTIPLO#=X Screen(X Mouse)/(607.0/FREQUENZAMASSIMA)
  940.      Hslider 0,136 To 607,143,FREQUENZAMASSIMA,MULTIPLO#,1 : Wait Vbl 
  941.      MULTIPLO#=MULTIPLO#+1 : Print At(76,17); Using "####";MULTIPLO#
  942.     End If 
  943.    Else If TASTODELTOPOPREMUTO=2
  944.     If ZONATOPO=19
  945.      Inverse On 
  946.      Print At(34,8);Chr$(147)+Chr$(148)
  947.      Proc TIC["Tasto sinistro del mouse>incremento veloce",ULTIMALINEA]
  948.      Inc NUOVAFREQUENZA
  949.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  950.      Proc FREQUENZA
  951.      NUOVOMESSAGGIO=True
  952.     End If 
  953.     If ZONATOPO=20
  954.      Inverse On 
  955.      Print At(36,8);Chr$(149)+Chr$(150)
  956.      Proc TIC["Tasto sinistro del mouse>decremento veloce",ULTIMALINEA]
  957.      Dec NUOVAFREQUENZA
  958.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  959.      Proc FREQUENZA
  960.      NUOVOMESSAGGIO=True
  961.     End If 
  962.    Else 
  963.     Inverse Off 
  964.     Print At(0,8);"Suona"
  965.     Print At(6,8);"Ferma"
  966.     Print At(25,8);"Frequenza"+Chr$(147)+Chr$(148)+Chr$(149)+Chr$(150)
  967.     Print At(0,18);"Suona"
  968.     Print At(6,19);"Sinusoidale"
  969.     Print At(6,20);"Triangolare"
  970.     Print At(6,21);"Dente di sega"
  971.     Print At(6,22);"Quadra"
  972.     Print At(6,23);"Disegno"
  973.     Print At(20,19);"Somma"
  974.     Print At(20,20);"Sottrai"
  975.     Print At(20,21);"Inverti"
  976.     Print At(20,22);"Rovescia"
  977.     Print At(20,23);"Progressione"
  978.     If NUOVOMESSAGGIO=True
  979.      Proc TIC["Premi Esc per uscire",ULTIMALINEA]
  980.      NUOVOMESSAGGIO=False
  981.     End If 
  982.     DENTROZONA=False
  983.    End If 
  984.   Until TASTOPREMUTO$<>""
  985.  Until TASTOPREMUTO$=Chr$(27)
  986.  Erase BANCO4
  987.  Proc AZZERAFORMADONDA
  988.  ANNOTAZIONI$="SamplesMaster by Stefano Regattin"
  989. End Proc
  990. Procedure INGRANDISCI
  991.  Cls 0,0,72 To 639+1,72+ALTEZZA+1
  992.  Ink 2 : Draw 0,72+ZERO To 639,72+ZERO : Ink 1
  993.  Clip 0,72 To 639,72+ALTEZZA
  994.  Gr Locate 0,72+ZERO
  995.  For X=0 To 639
  996.   POSIZIONE=POSIZIONEINGRANDIMENTO+X
  997.   DATO=Peek(POSIZIONE)
  998.   If DATO>127
  999.    Add DATO,-256
  1000.   End If 
  1001.   If POSIZIONE>=Start(BANCO) and POSIZIONE<=Start(BANCO)+Length(BANCO)-1
  1002.    If POSIZIONE=Start(BANCO)+Length(BANCO)-1
  1003.     Polyline X,72+ZERO-DATO To X,72+ZERO
  1004.    Else 
  1005.     Polyline To X,72+ZERO-DATO : Y=Ygr
  1006.    End If 
  1007.   Else 
  1008.    Gr Locate X+1,72+ZERO
  1009.   End If 
  1010.   If POSIZIONE=NUOVOINIZIOCAMPIONE
  1011.    Gr Writing 2 : Draw X,72 To X,72+ALTEZZA
  1012.    Gr Writing 1 : Gr Locate X,Y
  1013.   End If 
  1014.   If POSIZIONE=NUOVAFINECAMPIONE
  1015.    Gr Writing 2 : Draw X,72 To X,72+ALTEZZA
  1016.    Draw X+3,72 To X+7,72
  1017.    Draw X+3,74 To X+7,74
  1018.    Draw X+3,72 To X+3,76
  1019.    Gr Writing 1 : Gr Locate X,Y
  1020.   End If 
  1021.  Next X
  1022.  Clip 
  1023. End Proc
  1024. Procedure INIZIO
  1025.  If INIZIO=True
  1026.   Inverse On : Print At(39,ULTIMALINEA-2);"Inizio" : Inverse Off 
  1027.   Print At(46,ULTIMALINEA-2);"Fine"
  1028.  Else 
  1029.   Print At(39,ULTIMALINEA-2);"Inizio"
  1030.   Inverse On : Print At(46,ULTIMALINEA-2);"Fine" : Inverse Off 
  1031.  End If 
  1032. End Proc
  1033. Procedure LIMITI[NUMERO,LIMITEMINIMO,LIMITEMASSIMO]
  1034.  '-> Limiti by Stefano Regattin 
  1035.  'i> 19 maggio 1996 
  1036.  'm> 12 giugno 1996 
  1037.  '--------------------------------------------------------
  1038.  'La procedura equivale alle seguenti linee di programma: 
  1039.  ' If NUMERO<LIMITEMINIMO Then NUMERO=LIMITEMINIMO
  1040.  ' If NUMERO>LIMITEMASSIMO Then NUMERO=LIMITEMASSIMO
  1041.  'Se LIMITEMINIMO è maggiore di LIMITEMASSIMO ne scambia i valori 
  1042.  '----------------------------------------------------------------  
  1043.  If LIMITEMINIMO>LIMITEMASSIMO Then Swap LIMITEMINIMO,LIMITEMASSIMO
  1044.  NUMERO=Max(Min(NUMERO,LIMITEMASSIMO),LIMITEMINIMO)
  1045. End Proc[NUMERO]
  1046. Procedure LINEE
  1047.  Gr Writing 2 : Draw XLINEAINIZIOCAMPIONE,0 To XLINEAINIZIOCAMPIONE,63
  1048.  XLINEAINIZIOCAMPIONE=(NUOVOINIZIOCAMPIONE-INIZIOCAMPIONE)/PASSO
  1049.  Draw XLINEAINIZIOCAMPIONE,0 To XLINEAINIZIOCAMPIONE,63
  1050.  Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63
  1051.  XLINEAFINECAMPIONE=(NUOVAFINECAMPIONE-INIZIOCAMPIONE)/PASSO
  1052.  Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63 : Gr Writing 1
  1053. End Proc
  1054. Procedure MARCAALVOLO
  1055.  Proc TIC["Premi la barra di spazio per marcare l'inizio",ULTIMALINEA]
  1056.  Proc SUONA
  1057.  Timer=0
  1058.  TEMP0RIZZAZIONE=NUOVAFREQUENZA/50
  1059.  XINIZIO=XLINEAINIZIOCAMPIONE
  1060.  Gr Writing 2
  1061.  Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63
  1062.  Gr Writing 1
  1063.  Repeat 
  1064.   Gr Writing 2 : Draw XINIZIO,0 To XINIZIO,63 : Gr Writing 1
  1065.   TEMP0=Timer*TEMP0RIZZAZIONE
  1066.   X=XLINEAINIZIOCAMPIONE+TEMP0/PASSO
  1067.   TASTOPREMUTO$=Inkey$
  1068.   If TASTOPREMUTO$=" "
  1069.    NUOVOINIZIOCAMPIONE=Start(BANCO)+TEMP0
  1070.    XLINEAINIZIOCAMPIONE=X
  1071.    Gr Writing 2
  1072.    Draw XLINEAINIZIOCAMPIONE,0 To XLINEAINIZIOCAMPIONE,63
  1073.    Gr Writing 1
  1074.    SPAZIOPREMUTO=1
  1075.    Exit 
  1076.   End If 
  1077.   Gr Writing 2 : Draw X,0 To X,63 : Gr Writing 1
  1078.   XINIZIO=X
  1079.  Until TEMP0>LUNGHEZZACAMPIONE
  1080.  If TEMP0<LUNGHEZZACAMPIONE
  1081.   Proc TIC["Premi la barra di spazio per marcare la fine",ULTIMALINEA]
  1082.   Gr Writing 2 : Draw X,0 To X,63 : Gr Writing 1
  1083.   XFINE=X
  1084.   Repeat 
  1085.    Gr Writing 2 : Draw XFINE,0 To XFINE,63 : Gr Writing 1
  1086.    TEMP0=Timer*TEMP0RIZZAZIONE
  1087.    X=TEMP0/PASSO
  1088.    TASTOPREMUTO$=Inkey$
  1089.    If TASTOPREMUTO$=" "
  1090.     NUOVAFINECAMPIONE=Start(BANCO)+TEMP0
  1091.     XLINEAFINECAMPIONE=X
  1092.     Gr Writing 2
  1093.     Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63
  1094.     Gr Writing 1
  1095.     SPAZIOPREMUTO=2
  1096.     Exit 
  1097.    End If 
  1098.    Gr Writing 2 : Draw X,0 To X,63 : Gr Writing 1
  1099.    XFINE=X
  1100.   Until TEMP0>LUNGHEZZACAMPIONE
  1101.  End If 
  1102.  If SPAZIOPREMUTO=1
  1103.   Gr Writing 2 : Draw XFINE,0 To XFINE,63 : Gr Writing 1
  1104.  Else If SPAZIOPREMUTO=0
  1105.   Gr Writing 2
  1106.   Draw XINIZIO,0 To XINIZIO,63
  1107.   Draw XLINEAINIZIOCAMPIONE,0 To XLINEAINIZIOCAMPIONE,63
  1108.   Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63
  1109.   Gr Writing 1
  1110.  End If 
  1111. End Proc
  1112. Procedure MESSAGGI
  1113.  Proc TIC[NOMEFILE$+Str$(Length(BANCO))+" Byte",ULTIMALINEA-1]
  1114.  Proc TIC[Chr$(147)+Chr$(148)+" "+Chr$(149)+Chr$(150)+" zona attiva "+Chr$(151)+Chr$(152)+" "+Chr$(153)+Chr$(154)+" spostamento Esc Esci",ULTIMALINEA]
  1115. End Proc
  1116. Procedure MISCELATIMBRI
  1117.  Shared ANNOTAZIONI$
  1118.  Proc FERMACAMPIONEEDANNULLACICLOCAMPIONE
  1119.  Cls 
  1120.  FILE$=Fsel$("**","","Carica il primo campione audio","Premi Esc per uscire")
  1121.  If FILE$="" Then Pop Proc
  1122.  If Exist(FILE$)
  1123.   Open In 1,FILE$
  1124.   LUNGHEZZABANCO=Max(Lof(1),512)
  1125.   Close 1
  1126.   MEMORIA=Chip Free+Fast Free
  1127.   If LUNGHEZZABANCO>MEMORIA
  1128.    Proc TIC["Non c'è memoria sufficiente per caricare il file",ULTIMALINEA-1]
  1129.    Proc TIC[FILE$,ULTIMALINEA] : Wait 200
  1130.    SENZAMEMORIA=True
  1131.   Else 
  1132.    Reserve As Work BANCODIIO,LUNGHEZZABANCO
  1133.    Bload FILE$,Start(BANCODIIO)
  1134.    SENZAMEMORIA=False
  1135.    Proc CARICARAWOIFF
  1136.    LUNGHEZZABANCO1=LUNGHEZZABANCO
  1137.    Reserve As Chip Work BANCO3,LUNGHEZZABANCO1
  1138.    Copy Start(BANCO),Start(BANCO)+LUNGHEZZABANCO-1 To Start(BANCO3)
  1139.   End If 
  1140.  End If 
  1141.  FILE$=Fsel$("**","","Carica il secondo campione audio","Premi Esc per uscire")
  1142.  If FILE$="" Then Pop Proc
  1143.  If Exist(FILE$)
  1144.   Open In 1,FILE$
  1145.   LUNGHEZZABANCO=Max(Lof(1),512)
  1146.   Close 1
  1147.   MEMORIA=Chip Free+Fast Free
  1148.   If LUNGHEZZABANCO>MEMORIA
  1149.    Proc TIC["Non c'è memoria sufficiente per caricare il file",ULTIMALINEA-1]
  1150.    Proc TIC[FILE$,ULTIMALINEA] : Wait 200
  1151.    SENZAMEMORIA=True
  1152.   Else 
  1153.    Reserve As Work BANCODIIO,LUNGHEZZABANCO
  1154.    Bload FILE$,Start(BANCODIIO)
  1155.    SENZAMEMORIA=False
  1156.    Proc CARICARAWOIFF
  1157.    LUNGHEZZABANCO2=LUNGHEZZABANCO
  1158.    Reserve As Chip Work BANCO4,LUNGHEZZABANCO2
  1159.    Copy Start(BANCO),Start(BANCO)+LUNGHEZZABANCO-1 To Start(BANCO4)
  1160.   End If 
  1161.  End If 
  1162.  LUNGHEZZABANCO=Max(LUNGHEZZABANCO1,LUNGHEZZABANCO2)
  1163.  If LUNGHEZZABANCO1=0 or LUNGHEZZABANCO2=0
  1164.   Proc TIC["Devi scegliere due campioni audio!",ULTIMALINEA]
  1165.   Wait 200 : Pop Proc
  1166.  End If 
  1167.  If SENZAMEMORIA=True Then Pop Proc
  1168.  Reserve As Chip Work BANCO,LUNGHEZZABANCO
  1169.  GENERACAMPIONE=True
  1170.  Reserve Zone 8
  1171.  MOSTRACAMPIONEPERMISCELAZIONE[BANCO3,0]
  1172.  MOSTRACAMPIONEPERMISCELAZIONE[BANCO4,72]
  1173.  Print At(0,8);Zone$("Suona",1)
  1174.  Print At(6,8);Zone$("Ferma",2)
  1175.  Print At(12,8);Zone$("Ciclo",3)
  1176.  Print At(51,8);"Lunghezza>";Str$(Length(BANCO3))-" ";" Byte"
  1177.  Print At(18,8);Zone$("Filtro",4)
  1178.  Print At(0,17);Zone$("Suona",5)
  1179.  Print At(6,17);"Lunghezza>";Str$(Length(BANCO4))-" ";" Byte"
  1180.  Print At(25,8);Zone$("Frequenza",6);
  1181.  Print Zone$(Chr$(147)+Chr$(148),7);
  1182.  Print Zone$(Chr$(149)+Chr$(150),8);
  1183.  Print ">";Str$(NUOVAFREQUENZA)-" ";" Hertz"
  1184.  Proc CICLO
  1185.  Proc FILTRO
  1186.  Proc TIC["Spazio->miscela i due campioni Esc->esci",ULTIMALINEA]
  1187.  Repeat 
  1188.   Repeat 
  1189.    TASTOPREMUTO$=Inkey$
  1190.    TASTODELTOPOPREMUTO=Mouse Key
  1191.    ZONATOPO=Mouse Zone
  1192.    If TASTODELTOPOPREMUTO=1
  1193.     If DENTROZONA=False
  1194.      If ZONATOPO=1
  1195.       Inverse On : Print At(0,8);"Suona"
  1196.       Sam Raw 1,Start(BANCO3),Length(BANCO3),NUOVAFREQUENZA
  1197.       Sam Raw 2,Start(BANCO3),Length(BANCO3),NUOVAFREQUENZA
  1198.      End If 
  1199.      If ZONATOPO=2
  1200.       Inverse On : Print At(6,8);"Ferma"
  1201.       Sam Stop 
  1202.      End If 
  1203.      If ZONATOPO=3
  1204.       CICLO= Not CICLO : Proc CICLO
  1205.      End If 
  1206.      If ZONATOPO=4
  1207.       FILTRO= Not FILTRO : Proc FILTRO
  1208.      End If 
  1209.      If ZONATOPO=5
  1210.       Inverse On : Print At(0,17);"Suona"
  1211.       Sam Raw 4,Start(BANCO4),Length(BANCO4),NUOVAFREQUENZA
  1212.       Sam Raw 8,Start(BANCO4),Length(BANCO4),NUOVAFREQUENZA
  1213.      End If 
  1214.      If ZONATOPO=6
  1215.       Proc TIC["Ripristina la frequenza originaria",ULTIMALINEA]
  1216.       NUOVAFREQUENZA=FREQUENZA
  1217.       Proc FREQUENZA
  1218.       NUOVOMESSAGGIO=True
  1219.      End If 
  1220.      If ZONATOPO=7
  1221.       Inverse On : Print At(34,8);Chr$(147)+Chr$(148)
  1222.       Proc TIC["Tasto sinistro del mouse>incremento lento",ULTIMALINEA]
  1223.       Inc NUOVAFREQUENZA
  1224.       Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  1225.       Proc FREQUENZA
  1226.       NUOVOMESSAGGIO=True
  1227.      End If 
  1228.      If ZONATOPO=8
  1229.       Inverse On : Print At(36,8);Chr$(149)+Chr$(150)
  1230.       Proc TIC["Tasto sinistro del mouse>decremento lento",ULTIMALINEA]
  1231.       Dec NUOVAFREQUENZA
  1232.       Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  1233.       Proc FREQUENZA
  1234.       NUOVOMESSAGGIO=True
  1235.      End If 
  1236.      DENTROZONA=True
  1237.     End If 
  1238.    Else If TASTODELTOPOPREMUTO=2
  1239.     If ZONATOPO=7
  1240.      Inverse On 
  1241.      Print At(34,8);Chr$(147)+Chr$(148)
  1242.      Proc TIC["Tasto sinistro del mouse>incremento veloce",ULTIMALINEA]
  1243.      Inc NUOVAFREQUENZA
  1244.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  1245.      Proc FREQUENZA
  1246.      NUOVOMESSAGGIO=True
  1247.     End If 
  1248.     If ZONATOPO=8
  1249.      Inverse On 
  1250.      Print At(36,8);Chr$(149)+Chr$(150)
  1251.      Proc TIC["Tasto sinistro del mouse>decremento veloce",ULTIMALINEA]
  1252.      Dec NUOVAFREQUENZA
  1253.      Proc LIMITI[NUOVAFREQUENZA,500,28000] : NUOVAFREQUENZA=Param
  1254.      Proc FREQUENZA
  1255.      NUOVOMESSAGGIO=True
  1256.     End If 
  1257.    Else 
  1258.     Inverse Off 
  1259.     Print At(0,8);"Suona"
  1260.     Print At(6,8);"Ferma"
  1261.     Print At(25,8);"Frequenza"+Chr$(147)+Chr$(148)+Chr$(149)+Chr$(150)
  1262.     Print At(0,17);"Suona"
  1263.     If NUOVOMESSAGGIO=True
  1264.      Proc TIC["Spazio->miscela i due campioni Esc->esci",ULTIMALINEA]
  1265.      NUOVOMESSAGGIO=False
  1266.     End If 
  1267.     DENTROZONA=False
  1268.    End If 
  1269.   Until TASTOPREMUTO$<>""
  1270.   If TASTOPREMUTO$=Chr$(27) Then Pop Proc
  1271.  Until TASTOPREMUTO$=" "
  1272.  Proc TIC["Vuoi la dissolvenza da un campione all'altro (s/n)?",ULTIMALINEA]
  1273.  RISPOSTA$=Input$(1) : RISPOSTA$=Lower$(RISPOSTA$)
  1274.  If RISPOSTA$<>"s" and RISPOSTA$<>"n" Then Pop Proc
  1275.  If RISPOSTA$="s"
  1276.   If LUNGHEZZABANCO1>LUNGHEZZABANCO2
  1277.    SCELTA=1
  1278.   Else If LUNGHEZZABANCO1=LUNGHEZZABANCO2
  1279.    Repeat 
  1280.     Proc TIC["I 2 campioni sono lunghi uguali; quale scegli come campione di partenza (1/2)?",ULTIMALINEA]
  1281.     SCELTA$=Input$(1) : SCELTA=Val(SCELTA$)
  1282.    Until SCELTA=1 or SCELTA=2
  1283.   Else 
  1284.    SCELTA=2
  1285.   End If 
  1286.   Proc TIC["Sto miscelando i due campioni...",ULTIMALINEA]
  1287.   LUNGHEZZAMISCELAZIONE=Max(LUNGHEZZABANCO1,LUNGHEZZABANCO2)
  1288.   For INDIRIZZO=0 To LUNGHEZZAMISCELAZIONE-1
  1289.    VLOREPERCENTUALE=(INDIRIZZO*100)/(LUNGHEZZAMISCELAZIONE-1)
  1290.    DATO1=Peek(Start(BANCO3)+INDIRIZZO)
  1291.    If DATO1>127
  1292.     Add DATO1,-256
  1293.    End If 
  1294.    DATO2=Peek(Start(BANCO4)+INDIRIZZO)
  1295.    If DATO2>127
  1296.     Add DATO2,-256
  1297.    End If 
  1298.    If SCELTA=1
  1299.     DATO1=(DATO1*VLOREPERCENTUALE)/100
  1300.     If INDIRIZZO<=LUNGHEZZABANCO2
  1301.      DATO2=(DATO2*(100-VLOREPERCENTUALE))/100
  1302.     Else 
  1303.      DATO2=0
  1304.     End If 
  1305.    Else 
  1306.     If INDIRIZZO<=LUNGHEZZABANCO1
  1307.      DATO1=(DATO1*(100-VLOREPERCENTUALE))/100
  1308.     Else 
  1309.      DATO1=0
  1310.     End If 
  1311.     DATO2=(DATO2*VLOREPERCENTUALE)/100
  1312.    End If 
  1313.    DATOMISCELAZIONE=(DATO1+DATO2)/2
  1314.    If DATOMISCELAZIONE<0
  1315.     Add DATOMISCELAZIONE,256
  1316.    End If 
  1317.    Poke Start(BANCO)+INDIRIZZO,DATOMISCELAZIONE
  1318.    XBARRAPROGRESSO=(80*INDIRIZZO)/(LUNGHEZZAMISCELAZIONE-1)
  1319.    Inverse On : Print At(XBARRAPROGRESSO,ULTIMALINEA-1);" "; : Inverse Off 
  1320.   Next INDIRIZZO
  1321.  End If 
  1322.  If RISPOSTA$="n"
  1323.   Proc TIC["Sto miscelando i due campioni...",ULTIMALINEA]
  1324.   LUNGHEZZAMISCELAZIONE=Min(LUNGHEZZABANCO1,LUNGHEZZABANCO2)
  1325.   For INDIRIZZO=0 To LUNGHEZZAMISCELAZIONE-1
  1326.    DATO1=Peek(Start(BANCO3)+INDIRIZZO)
  1327.    DATO2=Peek(Start(BANCO4)+INDIRIZZO)
  1328.    If DATO1>127
  1329.     Add DATO1,-256
  1330.    End If 
  1331.    If DATO2>127
  1332.     Add DATO2,-256
  1333.    End If 
  1334.    DATOMISCELAZIONE=(DATO1+DATO2)/2
  1335.    If DATOMISCELAZIONE<0
  1336.     Add DATOMISCELAZIONE,256
  1337.    End If 
  1338.    Poke Start(BANCO)+INDIRIZZO,DATOMISCELAZIONE
  1339.    XBARRAPROGRESSO=(80*INDIRIZZO)/(LUNGHEZZAMISCELAZIONE-1)
  1340.    Inverse On : Print At(XBARRAPROGRESSO,ULTIMALINEA-1);" "; : Inverse Off 
  1341.   Next INDIRIZZO
  1342.  End If 
  1343.  ANNOTAZIONI$="SamplesMaster by Stefano Regattin"
  1344. End Proc
  1345. Procedure MOSTRACAMPIONE
  1346.  INIZIOCAMPIONE=NUOVOINIZIOCAMPIONE : FINECAMPIONE=NUOVAFINECAMPIONE
  1347.  PASSO=(FINECAMPIONE-INIZIOCAMPIONE+1)/640+1 : PASSO=Max(PASSO,1)
  1348.  Cls 0,0,0 To 639+1,63+1 : Ink 2 : Draw 0,31 To 639,31 : Gr Locate 0,31 : Ink 1
  1349.  For INDIRIZZO=INIZIOCAMPIONE To FINECAMPIONE Step PASSO
  1350.   DATO=Peek(INDIRIZZO) : If DATO>127 Then Add DATO,-256
  1351.   Polyline To X,31-DATO/4 : Inc X
  1352.  Next INDIRIZZO
  1353.  XLINEAINIZIOCAMPIONE=0 : XLINEAFINECAMPIONE=X-1
  1354.  Gr Writing 2 : Draw XLINEAINIZIOCAMPIONE,0 To XLINEAINIZIOCAMPIONE,63
  1355.  Draw XLINEAFINECAMPIONE,0 To XLINEAFINECAMPIONE,63 : Gr Writing 1
  1356.  Inverse Off : Print At(0,8);"Inizio>Byte";INIZIOCAMPIONE-Start(BANCO);
  1357.  Print " Fine>Byte";FINECAMPIONE-Start(BANCO);
  1358.  Print " Lunghezza>";Str$(LUNGHEZZACAMPIONE)-" ";" Byte     "
  1359.  DIVISIONESLIDERINGRANDIMENTO#=640.0/PASSO
  1360. End Proc
  1361. Procedure MOSTRACAMPIONEPERMISCELAZIONE[B,P]
  1362.  IC=Start(B) : FC=Start(B)+Length(B)-1
  1363.  PASSO=(FC-IC+1)/640+1 : PASSO=Max(PASSO,1)
  1364.  Ink 2 : Draw 0,P+31 To 639,P+31 : Gr Locate 0,P+31 : Ink 1
  1365.  For INDIRIZZO=IC To FC Step PASSO
  1366.   DATO=Peek(INDIRIZZO) : If DATO>127 Then Add DATO,-256
  1367.   Polyline To X,P+31-DATO/4 : Inc X
  1368.  Next INDIRIZZO
  1369. End Proc
  1370. Procedure MOSTRASINTETICO
  1371.  Shared LUNGHEZZASINTETICO
  1372.  Cls 0,0,0 To 511+1,63+1
  1373.  Ink 2 : Draw 0,31 To 511,31 : Ink 1
  1374.  Gr Locate 0,31 : DIVISORE=1
  1375.  For X=0 To LUNGHEZZASINTETICO-1
  1376.   DATO=F0RMADONDA(X)/DIVISORE
  1377.   If DATO>127 or DATO<-128
  1378.    Cls 0,0,0 To 511+1,63+1
  1379.    Ink 2 : Draw 0,31 To 511,31 : Ink 1
  1380.    Gr Locate 0,31 : Inc DIVISORE : X=-1
  1381.   End If 
  1382.   If X>-1
  1383.    Polyline To(X*512)/LUNGHEZZASINTETICO,31-DATO/4
  1384.    If DATO<0
  1385.     Add DATO,256
  1386.    End If 
  1387.    Poke Start(BANCO)+X,DATO
  1388.   End If 
  1389.  Next X
  1390. End Proc
  1391. Procedure MOSTRALAZONAATTIVA
  1392.  Print At(65,8);ZONAATTIVA$
  1393. End Proc
  1394. Procedure MULTIPLO
  1395.  Shared FREQUENZAMASSIMA,LUNGHEZZASINTETICO,MULTIPLO#
  1396.  Reserve As Work BANCO3,LUNGHEZZASINTETICO
  1397.  Repeat 
  1398.   For X=0 To LUNGHEZZASINTETICO-1 Step MULTIPLO#
  1399.    DATO=Peek(Start(BANCO4)+X)
  1400.    INDIRIZZO=Start(BANCO3)+M
  1401.    Poke INDIRIZZO,DATO : Inc M : Exit If M=LUNGHEZZASINTETICO
  1402.   Next X
  1403.  Until M=LUNGHEZZASINTETICO
  1404.  Gr Locate 0,103
  1405.  For X=0 To LUNGHEZZASINTETICO-1
  1406.   DATO=Peek(Start(BANCO3)+X)
  1407.   INDIRIZZO=Start(BANCO4)+X
  1408.   Poke INDIRIZZO,DATO
  1409.   If DATO>127
  1410.    Add DATO,-256
  1411.   End If 
  1412.   Polyline To(X*512)/LUNGHEZZASINTETICO,103-DATO/4
  1413.  Next X
  1414.  Erase BANCO3
  1415.  Inverse Off 
  1416.  Hslider 0,136 To 607,143,FREQUENZAMASSIMA,MULTIPLO#,1
  1417.  Print At(76,17); Using "####";MULTIPLO#
  1418. End Proc
  1419. Procedure SALVAUNFILE
  1420.  FILE$=Fsel$("**",NOMEFILE$,"Salva un campione audio","Premi Esc per uscire")
  1421.  If FILE$<>""
  1422.   Proc TIC["Vuoi salvarlo come file IFF (s/n) ?",ULTIMALINEA]
  1423.   RISPOSTA$=Input$(1) : RISPOSTA$=Lower$(RISPOSTA$)
  1424.   If RISPOSTA$="s"
  1425.    Proc TIC["Sto salvando il campione audio IFF",ULTIMALINEA-1]
  1426.    Proc TIC[FILE$,ULTIMALINEA]
  1427.    LUNGHEZZANOME=Len(NOMEFILE$)/4*4
  1428.    RESTONOME=Len(NOMEFILE$) mod 4
  1429.    If RESTONOME>0
  1430.     Add LUNGHEZZANOME,4
  1431.    End If 
  1432.    LUNGHEZZAANNO=40
  1433.    LUNGHEZZABANCO=40+8+LUNGHEZZAANNO+8+LUNGHEZZACAMPIONE
  1434.    If NOMEFILE$<>""
  1435.     Add LUNGHEZZABANCO,8+LUNGHEZZANOME
  1436.    End If 
  1437.    LUNGHEZZABANCOPARI=LUNGHEZZABANCO mod 2
  1438.    If LUNGHEZZABANCOPARI=1
  1439.     Inc LUNGHEZZABANCO
  1440.    End If 
  1441.    Reserve As Work BANCODIIO,LUNGHEZZABANCO
  1442.    INDIRIZZO=Start(BANCODIIO)
  1443.    Poke$ INDIRIZZO,"FORM"
  1444.    Add INDIRIZZO,4
  1445.    Loke INDIRIZZO,LUNGHEZZABANCO-8
  1446.    Add INDIRIZZO,4
  1447.    Poke$ INDIRIZZO,"8SVXVHDR"
  1448.    Add INDIRIZZO,8
  1449.    Loke INDIRIZZO,20
  1450.    Add INDIRIZZO,4
  1451.    Loke INDIRIZZO,0
  1452.    Add INDIRIZZO,4
  1453.    Loke INDIRIZZO,LUNGHEZZACAMPIONE
  1454.    Add INDIRIZZO,4
  1455.    Loke INDIRIZZO,0
  1456.    Add INDIRIZZO,4
  1457.    Doke INDIRIZZO,NUOVAFREQUENZA
  1458.    Add INDIRIZZO,2
  1459.    Doke INDIRIZZO,256
  1460.    Add INDIRIZZO,2
  1461.    Doke INDIRIZZO,256
  1462.    Add INDIRIZZO,2
  1463.    Doke INDIRIZZO,0
  1464.    Add INDIRIZZO,2
  1465.    If NOMEFILE$<>""
  1466.     Poke$ INDIRIZZO,"NAME"
  1467.     Add INDIRIZZO,4
  1468.     Loke INDIRIZZO,LUNGHEZZANOME
  1469.     Add INDIRIZZO,4
  1470.     Poke$ INDIRIZZO,NOMEFILE$
  1471.     Add INDIRIZZO,Len(NOMEFILE$)
  1472.     If RESTONOME>0
  1473.      ZERINELNOME=4-RESTONOME
  1474.      Inverse On 
  1475.      For A=1 To ZERINELNOME
  1476.       Poke INDIRIZZO,0
  1477.       Inc INDIRIZZO
  1478.      Next A
  1479.     End If 
  1480.    End If 
  1481.    Poke$ INDIRIZZO,"ANNO"
  1482.    Add INDIRIZZO,4
  1483.    Loke INDIRIZZO,LUNGHEZZAANNO
  1484.    Add INDIRIZZO,4
  1485.    Poke$ INDIRIZZO,"SamplesMaster by Stefano Maria Regattin"+Chr$(0)
  1486.    Add INDIRIZZO,LUNGHEZZAANNO
  1487.    Poke$ INDIRIZZO,"BODY"
  1488.    Add INDIRIZZO,4
  1489.    Loke INDIRIZZO,LUNGHEZZACAMPIONE
  1490.    Add INDIRIZZO,4
  1491.    Copy INIZIOCAMPIONE,FINECAMPIONE To INDIRIZZO
  1492.    Add INDIRIZZO,LUNGHEZZACAMPIONE+LUNGHEZZABANCOPARI
  1493.    If INDIRIZZO=Start(BANCODIIO)+Length(BANCODIIO)
  1494.     Proc TIC["Conversione campione audio da RAW ad IFF avvenuta",ULTIMALINEA]
  1495.    Else 
  1496.     Proc TIC["Conversione campione audio da RAW ad IFF fallita!",ULTIMALINEA]
  1497.     Erase BANCODIIO
  1498.     Wait 200
  1499.     Pop Proc
  1500.    End If 
  1501.    Bsave FILE$,Start(BANCODIIO) To Start(BANCODIIO)+Length(BANCODIIO)
  1502.    Erase BANCODIIO
  1503.   Else 
  1504.    Proc TIC["Sto salvando il campione audio RAW",ULTIMALINEA-1]
  1505.    Proc TIC[FILE$,ULTIMALINEA]
  1506.    Bsave FILE$,INIZIOCAMPIONE To FINECAMPIONE+1
  1507.   End If 
  1508.   Wait 200
  1509.  End If 
  1510. End Proc
  1511. Procedure SETTALEZONE
  1512.  Reserve Zone 22
  1513.  Print At(0,ULTIMALINEA-3);Zone$("Suona",1)
  1514.  Print At(0,ULTIMALINEA-2);Zone$("Ferma",2)
  1515.  Print At(6,ULTIMALINEA-3);Zone$("Ciclo",3)
  1516.  Print At(12,ULTIMALINEA-3);Zone$("Filtro",4)
  1517.  Print At(21,ULTIMALINEA-3);"Mostra campione"
  1518.  Print At(19,ULTIMALINEA-2);Zone$("Tutto",5)
  1519.  Print At(26,ULTIMALINEA-2);Zone$("Tra le linee",6)
  1520.  Print At(40,ULTIMALINEA-3);"Posizione"
  1521.  Inverse On : Print At(39,ULTIMALINEA-2);Zone$("Inizio",7) : Inverse Off 
  1522.  Print At(46,ULTIMALINEA-2);Zone$("Fine",8)
  1523.  Print At(53,ULTIMALINEA-3);"Cerca lo zero"
  1524.  Print At(51,ULTIMALINEA-2);Zone$("<Indietro",9)
  1525.  Print At(61,ULTIMALINEA-2);Zone$("Avanti>",10)
  1526.  Print At(69,ULTIMALINEA-3);Zone$("Carica",11)
  1527.  Set Zone 12,0,72 To 639,72+ALTEZZA
  1528.  Set Zone 13,0,0 To 639,63
  1529.  Print At(6,ULTIMALINEA-2);Zone$("Genera",14)
  1530.  Print At(69,ULTIMALINEA-2);Zone$("Salva",15)
  1531.  Print At(76,ULTIMALINEA-2);Zone$("Esci",16)
  1532.  Set Zone 17,0,72+ALTEZZA+1 To 639,72+ALTEZZA+1+7
  1533.  YSLIDERINGRANDIMENTO=72+ALTEZZA+1
  1534.  Hslider 0,YSLIDERINGRANDIMENTO To 639,YSLIDERINGRANDIMENTO+7,PASSO,0,1
  1535.  Print At(0,ULTIMALINEA-5);Zone$("Frequenza",18);
  1536.  Print Zone$(Chr$(147)+Chr$(148),19);
  1537.  Print Zone$(Chr$(149)+Chr$(150),20);
  1538.  Print ">"
  1539.  Print At(26,ULTIMALINEA-5);Zone$("MixTimbri",21)
  1540.  Print At(36,ULTIMALINEA-5);Zone$("MarcaAlVolo",22)
  1541. End Proc
  1542. Procedure SETTASCHERMO
  1543.  If Ntsc Then LUNGHEZZASCHERMO=200 Else LUNGHEZZASCHERMO=256
  1544.  If Ntsc Then RIDUZIONE=4 Else RIDUZIONE=2
  1545.  ALTEZZA=256/RIDUZIONE-1 : ZERO=128/RIDUZIONE-1
  1546.  ULTIMALINEA=LUNGHEZZASCHERMO/8-1
  1547.  Screen Open 0,640,LUNGHEZZASCHERMO,4,Hires : Curs Off : Flash Off 
  1548.  Palette $60,$CCC,$C00,$C0 : Pen 1 : Paper 0 : Cls : Curs Pen 1
  1549.  Wait Vbl : Limit Mouse 
  1550. End Proc
  1551. Procedure SLIDERINGRANDIMENTO
  1552.  Hslider 0,YSLIDERINGRANDIMENTO To 639,YSLIDERINGRANDIMENTO+7,PASSO,POSIZIONESLIDER,1
  1553. End Proc
  1554. Procedure SOMMA
  1555.  Shared LUNGHEZZASINTETICO
  1556.  For X=0 To LUNGHEZZASINTETICO-1
  1557.   DATO=Peek(Start(BANCO4)+X)
  1558.   If DATO>127
  1559.    Add DATO,-256
  1560.   End If 
  1561.   Add F0RMADONDA(X),DATO
  1562.  Next X
  1563. End Proc
  1564. Procedure SUONA
  1565.  Sam Raw 1,NUOVOINIZIOCAMPIONE,LUNGHEZZACAMPIONE,NUOVAFREQUENZA
  1566.  Sam Raw 2,NUOVOINIZIOCAMPIONE,LUNGHEZZACAMPIONE,NUOVAFREQUENZA
  1567. End Proc
  1568. Procedure TIC[TESTO$,LINEA]
  1569.  '-> Testo Invertito e Centrato by Stefano Regattin 
  1570.  'i> 23 maggio 1996 
  1571.  'm> 25 maggio 1996 
  1572.  '--------------------------------------------------------------------------- 
  1573.  'LINEA contiene il numero di linea dove si posizionerà il testo; se vale -1
  1574.  ' (True) il testo sarà posizionato alla linea dove si trova il cursore; in 
  1575.  ' questo caso sarà necessario un comando PRINT per spostare il cursore 
  1576.  '----------------------------------------------------------------------
  1577.  If LINEA=True Then L=Y Curs Else L=LINEA
  1578.  Locate 0,L : Inverse On : Cline : Centre TESTO$ : Inverse Off 
  1579. End Proc
  1580.